package com.dbf.forum.service.offre;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import com.dbf.forum.common.service.CommonServiceImpl;
import com.dbf.forum.common.utils.CommonHelper;
import com.dbf.forum.common.utils.SecurityHelper;
import com.dbf.forum.core.offre.Offre;
import com.dbf.forum.core.offre.OffreDto;
import com.dbf.forum.core.produit.Produit;
import com.dbf.forum.core.produit.ProduitDto;
import com.dbf.forum.dao.offre.OffreDao;
import com.google.gson.Gson;

@Service(value="offreService")
public class OffreServiceImpl extends CommonServiceImpl implements OffreService{
	
	@Autowired
	OffreDao offreDao;
	
	public Page<OffreDto> getOffresByUserAndProduits(Pageable page){
		Long userId = SecurityHelper.currentUserId();
		
		List<Offre> offresByUser = offreDao.getOffresByUserAndProduits(userId);
		
		Page<Offre>  pageableOffresByUser = new PageImpl<Offre>(offresByUser, page, offresByUser.size());
		return this.mapPage(pageableOffresByUser, OffreDto.class);
	}
	
	public OffreDto getOffreById(Long id){
		
		Offre offreById = offreDao.find(Offre.class, id);
		OffreDto offreDto = CommonHelper.populate(offreById);
		Gson gson = new Gson();
		String offreJson = gson.toJson(offreById);
		Offre offre = gson.fromJson(offreJson, Offre.class);
		return offreDto;
	}
	
	@Transactional
	public OffreDto updateOffre(OffreDto offreDto){
		
		Offre offreById = offreDao.find(Offre.class, offreDto.getId());
		offreById = CommonHelper.populate(offreDto);
		offreDto = CommonHelper.populate(offreById);
		return offreDto;
	}
	
	
	

}
